package com.hsgene.pay.persistence;

import com.hsgene.order.domain.v1.GeneticTestingOrderPayment;
import com.hsgene.pay.domain.PayMethod;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

/**
 * @description:
 * @projectName: hdas-geneshop-server
 * @package: com.hsgene.pay.persistence
 * @author: maodi
 * @createDate: 2018/9/30 10:36
 * @version: 1.0
 * Copyright: Copyright (c) 2018
 */

@Repository
public interface OrderPayRepository {

    /**
     * @param
     * @return List<PayMethodDto>
     * @description 获取支付方式列表
     * @author maodi
     * @createDate 2018/9/30 10:37
     */
    List<PayMethod> getPayMethodList();

    /**
     * 获取订单状态
     *
     * @param mchOrderNo 订单id
     * @return
     */
    Integer getGoodsOrder(@Param("orderId") String mchOrderNo);

    /**
     * 支付订单状态更新为地服确认
     *
     * @param mchOrderNo
     * @param date
     * @param value
     * @return
     */
    int updateStatus4Success(@Param("orderId") String mchOrderNo, @Param("date") Date date,
                             @Param("value") String value);

    /**
     * 获取订单金额
     *
     * @param mchOrderNo
     * @return
     */
    Double getGoodsOrderMoney(@Param("orderId") String mchOrderNo);

    /**
     * 更新支付数据
     *  @param orderId 订单id
     * @param payNo   支付单号
     * @param amount  支付金额
     * @param date    时间
     * @param payTypeValue 支付类型
     */
    void updatePayment(@Param("orderId") String orderId, @Param("payNo") String payNo,
                       @Param("amount") Double amount, @Param("date") Date date,
                       @Param("payType") Integer payTypeValue);

    /**
     * 更新支付信息
     *
     * @param payment 支付信息
     */
    void update(@Param("payment") GeneticTestingOrderPayment payment);

    /**
     * 微信支付插入信息
     *
     * @param orderPayment
     */
    void insertPayInfo(GeneticTestingOrderPayment orderPayment);

    /**
     * 删除文支付的
     *
     * @param orderId
     */
    void deleteNoPayInfo(@Param("orderId") String orderId);

    /**
     * 更新订单套餐
     *
     * @param orderId    订单id
     * @param updateTime
     */
    void updateOrderPackage(@Param("orderId") String orderId, @Param("updateTime") Date updateTime);

    /**
     * @param date             更新时间
     * @param firstSingleAward 首次奖励状态
     * @param id               订单id
     * @return void
     * @description 修改奖励标记状态
     * @author maodi
     * @createDate 2018/12/25 17:29
     */
    void updateFirstSingleAward(@Param("updateDateTime") Date date, @Param("firstSingleAward") Integer
            firstSingleAward, @Param("id") String id);

    /**
     * @param id 订单id
     * @return java.lang.String
     * @description 根据订单id获取订单患者姓名
     * @author maodi
     * @createDate 2018/12/25 17:45
     */
    String queryPatientNameByOrderId(@Param("id") String id);

    /**
     * @param orderId 订单id
     * @return java.lang.Integer
     * @description 根据订单id获取订单的支付方式
     * @author maodi
     * @createDate 2018/12/25 17:45
     */
    Integer queryPayerTypeByOrderId(@Param("orderId") String orderId);

    /**
     * @param patientName 患者姓名
     * @return int
     * @description 根据患者姓名获取该患者订单的数量
     * @author maodi
     * @createDate 2018/11/26 13:58
     */
    Integer queryOrderCountByPatientName(@Param("patientName") String patientName);

    /**
     * @param id 订单id
     * @return java.lang.Integer
     * @description 根据订单id获取订单来源
     * @author maodi
     * @createDate 2018/12/26 15:17
     */
    Integer queryOrderOriginByOrderId(@Param("id") String id);
}

